﻿using System;
using System.Configuration;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraBars.Alerter;
using DevExpress.XtraEditors.DXErrorProvider;

namespace QuanLyTiemThuocTay
{
    public class clsHam
    {
        private static string[] ChuSo = new string[10] { " không", " một", " hai", " ba", " bốn", " năm", " sáu", " bẩy", " tám", " chín" };
        private static string[] Tien = new string[6] { "", " nghìn", " triệu", " tỷ", " nghìn tỷ", " triệu tỷ" };
        public static NGUOIDUNG ndunghientai = new NGUOIDUNG();
        public static string returnvalueinputbox;




        public static string DocTienBangChu(long SoTien, string strTail)
        {
            int lan, i;
            long so;
            string KetQua = "", tmp = "";
            int[] ViTri = new int[6];
            if (SoTien < 0) return "Số tiền âm !";
            if (SoTien == 0) return "Không đồng !";
            if (SoTien > 0)
            {
                so = SoTien;
            }
            else
            {
                so = -SoTien;
            }
            //Kiểm tra số quá lớn
            if (SoTien > 8999999999999999)
            {
                SoTien = 0;
                return "";
            }
            ViTri[5] = (int)(so / 1000000000000000);
            so = so - long.Parse(ViTri[5].ToString()) * 1000000000000000;
            ViTri[4] = (int)(so / 1000000000000);
            so = so - long.Parse(ViTri[4].ToString()) * +1000000000000;
            ViTri[3] = (int)(so / 1000000000);
            so = so - long.Parse(ViTri[3].ToString()) * 1000000000;
            ViTri[2] = (int)(so / 1000000);
            ViTri[1] = (int)((so % 1000000) / 1000);
            ViTri[0] = (int)(so % 1000);
            if (ViTri[5] > 0)
            {
                lan = 5;
            }
            else if (ViTri[4] > 0)
            {
                lan = 4;
            }
            else if (ViTri[3] > 0)
            {
                lan = 3;
            }
            else if (ViTri[2] > 0)
            {
                lan = 2;
            }
            else if (ViTri[1] > 0)
            {
                lan = 1;
            }
            else
            {
                lan = 0;
            }
            for (i = lan; i >= 0; i--)
            {
                tmp = DocSo3ChuSo(ViTri[i]);
                KetQua += tmp;
                if (ViTri[i] != 0) KetQua += Tien[i];
                if ((i > 0) && (!string.IsNullOrEmpty(tmp))) KetQua += ",";//&& (!string.IsNullOrEmpty(tmp))
            }
            if (KetQua.Substring(KetQua.Length - 1, 1) == ",") KetQua = KetQua.Substring(0, KetQua.Length - 1);
            KetQua = KetQua.Trim() + strTail;
            return KetQua.Substring(0, 1).ToUpper() + KetQua.Substring(1);
        }
        // Hàm đọc số có 3 chữ số
        private static string DocSo3ChuSo(int baso)
        {
            int tram, chuc, donvi;
            string KetQua = "";
            tram = (int)(baso / 100);
            chuc = (int)((baso % 100) / 10);
            donvi = baso % 10;
            if ((tram == 0) && (chuc == 0) && (donvi == 0)) return "";
            if (tram != 0)
            {
                KetQua += ChuSo[tram] + " trăm";
                if ((chuc == 0) && (donvi != 0)) KetQua += " linh";
            }
            if ((chuc != 0) && (chuc != 1))
            {
                KetQua += ChuSo[chuc] + " mươi";
                if ((chuc == 0) && (donvi != 0)) KetQua = KetQua + " linh";
            }
            if (chuc == 1) KetQua += " mười";
            switch (donvi)
            {
                case 1:
                    if ((chuc != 0) && (chuc != 1))
                    {
                        KetQua += " mốt";
                    }
                    else
                    {
                        KetQua += ChuSo[donvi];
                    }
                    break;
                case 5:
                    if (chuc == 0)
                    {
                        KetQua += ChuSo[donvi];
                    }
                    else
                    {
                        KetQua += " lăm";
                    }
                    break;
                default:
                    if (donvi != 0)
                    {
                        KetQua += ChuSo[donvi];
                    }
                    break;
            }
            return KetQua;
        }
        /// <summary>
        /// Hiển thị thông báo tại góc phải dưới của màn hình
        /// </summary>
        /// <param name="Title">Tiêu đề thông báo</param>
        /// <param name="Content">Nội dung thông báo</param>
        public static void HienThi(string Title, string Content)
        {
            var alert = new AlertControl { AutoFormDelay = 5000 };
            alert.Show(null, Title, Content);
        }
        /// <summary>
        /// Mã hóa mật khẩu ra MD5+Base64
        /// </summary>
        /// <param name="input">String - Chuỗi cần mã hóa</param>
        /// <returns>String - Chuỗi đã mã hóa</returns>
        public static String MaHoa(String input)
        {
            String output;
            //The encoder class used to convert strPlainText to an array of bytes
            Encoding enc = Encoding.GetEncoding("windows-874");
            //Create an instance of the MD5CryptoServiceProvider class
            MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
            //Call ComputeHash, passing in the plain-text string as an array of bytes
            //The return value is the encrypted value, as an array of bytes
            Byte[] hashedDataBytes = md5Hasher.ComputeHash(enc.GetBytes(input));
            output = Convert.ToBase64String(hashedDataBytes, 0, hashedDataBytes.Length);
            //output = BitConverter.ToString(hashedDataBytes);
            return output;
        }

        #region ValidIsNotBlank
        public static ConditionValidationRule KTraDuLieuKhongRong(string errortext)
        {
            ConditionValidationRule ret = new ConditionValidationRule { ConditionOperator = ConditionOperator.IsNotBlank, ErrorText = errortext };
            return ret;
        }
        #endregion

        #region ValidIsNotEqual
        public static CompareAgainstControlValidationRule KTraDuLieuKhongBang(Control sosanh, string errortext)
        {
            CompareAgainstControlValidationRule compareValidationRule = new CompareAgainstControlValidationRule { Control = sosanh, CompareControlOperator = CompareControlOperator.Equals, ErrorText = errortext, CaseSensitive = true };
            return compareValidationRule;
        }
        #endregion

        public static string ConnectionString()
        {
            return ConfigurationManager.ConnectionStrings["QuanLyTiemThuocTay.Properties.Settings.QUANLYTHUOCConnectionString"].ConnectionString;
        }

        #region ValidIsNotBlank

        public static ConditionValidationRule ValidIsNotBlank(string errortext)
        {
            ConditionValidationRule ret = new ConditionValidationRule { ConditionOperator = ConditionOperator.IsNotBlank, ErrorText = errortext };
            return ret;
        }
        #endregion

        #region ValidIsNotEqual
        public static CompareAgainstControlValidationRule ValidIsNotEqual(Control sosanh, string errortext)
        {
            CompareAgainstControlValidationRule compareValidationRule = new CompareAgainstControlValidationRule { Control = sosanh, CompareControlOperator = CompareControlOperator.Equals, ErrorText = errortext, CaseSensitive = true };
            return compareValidationRule;
        }
        #endregion
    }
}
